﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Runtime.InteropServices;

namespace Jardin_Informativo_Agua_Tierra
{
    public partial class ComprobarConexion : Form
    {

        [DllImport("wininet.dll")]
        private extern static bool InternetGetConnectedState(out int Description, int ReservedValue);
        JardinInformativoBDEntities BEDE = new JardinInformativoBDEntities();
        IEnumerable<Parvulo> ListaParvulos;
        IEnumerable<Nivel> ListaNiveles;
        IEnumerable<Trabajador> ListaTrabajadores;
        IEnumerable<Apoderado> ListaApoderados;
        IEnumerable<Padre> ListaPadres;
        IEnumerable<Madre> ListaMadres;
        IEnumerable<Conviviente> Listaconvivientes;
        IEnumerable<Ficha_Salud> ListaSalud;
        public ComprobarConexion()
        {
            InitializeComponent();
        }

        private int ProbarConexion()
        {
            label2.Text = "Comprobando conexión a la red...";
            int inttemp;
            if (InternetGetConnectedState(out inttemp, 0))
            {
                try
                {
                    ListaParvulos = BEDE.Parvulo.OrderBy(c => c.folio_ficha);
                    foreach (Parvulo aux in ListaParvulos)
                    {
                        label3.Text = "Comprobando Parvulos...";
                    }
                    ListaSalud = BEDE.Ficha_Salud.OrderBy(c => c.cod_ficha);
                    foreach (Ficha_Salud aux in ListaSalud)
                    {
                        label3.Text = "Comprobando Parvulos...";
                    }
                    ListaTrabajadores = BEDE.Trabajador.OrderBy(c => c.rut);
                    foreach (Trabajador aux in ListaTrabajadores)
                    {
                        label3.Text = "Revisando Trabajadores...";
                    }
                    ListaNiveles = BEDE.Nivel.OrderBy(c => c.cod_nivel);
                    foreach (Nivel aux in ListaNiveles)
                    {
                        label3.Text = "Revisando Niveles...";
                    }
                    ListaApoderados = BEDE.Apoderado.OrderBy(c => c.rut_apoderado);
                    foreach (Apoderado aux in ListaApoderados)
                    {
                        label3.Text = "Comprobando antecedentes familiares...";
                    }
                    ListaPadres = BEDE.Padre.OrderBy(c => c.rut_padre);
                    foreach (Padre aux in ListaPadres)
                    {
                        label3.Text = "Comprobando antecedentes familiares...";
                    }
                    ListaMadres = BEDE.Madre.OrderBy(c=>c.rut_madre);
                    foreach(Madre aux in ListaMadres)
                    {
                        label3.Text = "Comprobando antecedentes familiares...";
                    }
                    Listaconvivientes = BEDE.Conviviente.OrderBy(c => c.cod_conviviente);
                    foreach (Conviviente aux in Listaconvivientes)
                    {
                        label3.Text = "Comprobando antecedentes familiares...";
                    }
                    this.Cursor = Cursors.Arrow;
                    return 2;
                }
                catch { this.Cursor = Cursors.Arrow; return 1; }
            }
            else { this.Cursor = Cursors.Arrow; return 0; }
        }

        private void ComprobarConexion_Load(object sender, EventArgs e)
        {
            btn_Reintentar.Visible = true;
            btn_Salir.Visible = true;
            lineShape1.Visible = true;
            this.Cursor = Cursors.WaitCursor;
            int seguir = ProbarConexion();
            if (seguir == 0)
            {
                label2.Text = "Problemas de conexión.";
                label3.Text = "Revise su conexión a internet\ny reintente la conexión.";
                btn_Reintentar.Visible = true;
                btn_Salir.Visible = true;
                lineShape1.Visible = true;
            }
            else
            {
                if (seguir == 1)
                {
                    label2.Text = "Problemas de acceso a la Base de Datos.";
                    label3.Text = "El sistema no puede acceder a los datos.\nEspere un par de minutos y vuelva a intentar.";
                    btn_Reintentar.Visible = true;
                    btn_Salir.Visible = true;
                    lineShape1.Visible = true;
                }
                else
                {
                    if (seguir == 2)
                    {
                        label2.Text = "Conexión Establecida";
                        label3.Text = "Se procederá a iniciar el sistema...";
                        btn_Reintentar.Visible = false;
                        btn_Salir.Visible = false;
                        lineShape1.Visible = false;
                        this.TopLevel = false;
                        this.Dispose();
                        this.Close();
                    }
                }
            }
        }

        private void btn_Reintentar_Click(object sender, EventArgs e)
        {
            btn_Reintentar.Visible = false;
            btn_Salir.Visible = false;
            lineShape1.Visible = false;
            this.Cursor = Cursors.WaitCursor;
            int seguir = ProbarConexion();
            if (seguir == 0)
            {
                label2.Text = "Problemas de conexión.";
                label3.Text = "Revise su conexión a internet\ne intente una ves mas.";
                btn_Reintentar.Visible = true;
                btn_Salir.Visible = true;
                lineShape1.Visible = true;
            }
            else
            {
                if (seguir == 1)
                {
                    label2.Text = "Problemas de acceso a la Base de Datos nuevamente.";
                    label3.Text = "El sistema no puede acceder a los datos.\nEspere un par de minutos y vuelva a intentar.";
                    btn_Reintentar.Visible = true;
                    btn_Salir.Visible = true;
                    lineShape1.Visible = true;
                }
                else
                {
                    if (seguir == 2)
                    {
                        label2.Text = "Conexión Establecida";
                        label3.Text = "Se procederá a iniciar el sistema...";
                        btn_Reintentar.Visible = false;
                        btn_Salir.Visible = false;
                        lineShape1.Visible = false;
                        this.TopLevel = false;
                        this.Dispose();
                        this.Close();
                    }
                }
            }
        }

        private void btn_Salir_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Disculpe las molestias causadas. Los problemas pueden tener origen en mantenciones en el servidor de la base de datos, o problemas con su conexión de internet. Espere unos momentos, y vuelva a intentarlo mas tarde. En caso de persistir el problema, se aconseja contactar a su proveedor de software.\n\nMuchas gracias por su paciencia,hasta pronto! =)", "CERRANDO EL SISTEMA.", MessageBoxButtons.OK, MessageBoxIcon.Information);
            this.Dispose();
            Application.Exit();
        }
    }
}
